package io;

import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
import java.util.Scanner;

public class Demo12 {
    public static void main(String[] args) {
        //在给定的路径底下，查找文件名，文件内容中包含关键词的文件
        Scanner scanner=new Scanner(System.in);
        System.out.println("请你输入要扫描的路径：");
        String rootPath= scanner.next();
        System.out.println("请你输入关键词：");
        String word=scanner.next();
        //检查用户输入的合法性
        //先检查用户输入关键词的合法性
        if (word.isEmpty()){
            System.out.println("用户输入的关键词为空！");
            return;
        }
        //检查用户输入扫描路径的合法性
        File file=new File(rootPath);
        if (!file.isDirectory()){
            System.out.println("用户输入的路径有误！");
            return;
        }
        search(file,word);
    }

    private static void search(File rootFile, String word) {
        File[] files=rootFile.listFiles();
        if (files==null){
            return;
        }
        for (File file:
             files) {
            if (file.isFile()){
                trySearch(file, word);
            }else if(file.isDirectory()){
                search(file,word);
            }
        }
    }

    private static void trySearch(File file, String word) {
        //判断文件名中是否包含关键词
        if (file.getName().contains(word)){
            System.out.println("找到了文件，此文件名中包含关键字！"+file.getAbsolutePath());
            return;
        }
        //判断文件内容中是否包含了关键词
        try (Reader reader=new FileReader(file)){
            StringBuilder result=new StringBuilder();
            while (true){
                char[] chars=new char[1024];
                int n=reader.read(chars);
                if (n==-1){
                    break;
                }
                result.append(chars,0,n);
            }
            if (result.indexOf(word)>0){
                System.out.println("找到了文件，文件内容中包含关键词!"+file.getAbsolutePath());
            }else {
                //文件内容中不包含关键词
                return;
            }
        }catch (IOException e){
            e.printStackTrace();
        }
    }
}
